/**
 * @author : xwj
 * @date : 2021/7/13 22:06
 * @description : 请你来实现一个 myAtoi(string s) 函数，使其能将字符串转换成一个 32 位有符号整数
 * @class : eight
 **/

public class test8 {

    public int myAtoi(String s){
        long result = 0;
        int flag=0;
        int i = 0;
        if (s.isEmpty()){
            return 0;
        }
        while (!Character.isDigit(s.charAt(i))){
            if ((s.charAt(i) == ' ' && (flag == 1 || flag == 2)) || ((s.charAt(i) == '-' || s.charAt(i) == '+') && (flag==1 || flag == 2))){
                return 0;
            }
            if (s.charAt(i) == ' '){
                i++;
                if (i >= s.length() - 1) {
                    return 0;
                }
                continue;
            }
            if ((s.charAt(i) == '-')){
                i++;
                flag = 1;
                if (i > s.length() - 1) {
                    return 0;
                }
                continue;
            }
            if ((s.charAt(i) == '+')){
                i++;
                flag = 2;
                if (i > s.length() - 1) {
                    return 0;
                }
                continue;
            }
            if (s.charAt(i) != ' ' || (s.charAt(i) != '-' || (s.charAt(i) == '+'))){
                return 0;
            }
            i++;
            if (i > s.length() - 1) {
                return 0;
            }
        }
        for (; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))){
                int a = Integer.parseInt(String.valueOf(s.charAt(i)));
                if ((result*10 + a) > Math.pow(2,31) && s.contains("-")){
                    return (int) -Math.pow(2,31);
                }
                if ((result*10 + a) > Math.pow(2,31)-1 && !s.contains("-")){
                    return (int) (Math.pow(2,31)-1);
                }
                result = result*10+a;
            }else {
                break;
            }
        }
        if (flag == 1){
            return (int) -result;
        } else{
            return (int) result;
        }
    }

    public static void main(String[] args) {
        String str = "-1";
        System.out.println(new test8().myAtoi(str));
    }

}
